<?php

namespace App\Http\Controllers;

use App\Http\Requests\AddCartRequest;
use App\Models\CartItem;
use App\Models\ProductSku;
use Illuminate\Http\Request;

class CartController extends Controller
{
    public function add(AddCartRequest $request){
        $user=$request->user();
        $amount=$request->input('amount');
        $skuId=$request->input('sku_id');
        if($cart=$user->cartItems->where('product_sku_id', $skuId)->first()){   // 动态属性改成 $user->cartItems() 也正确
            $cart->update(['amount'=>$cart->amount+$amount]);
        }else{
            $cart=new CartItem(['amount'=>$amount]);
            $cart->product_sku_id=$skuId;
            $cart->user_id=$user->id;
//            $cart->user()->associate($user);  // ok 使用成员函数建立关联
//            $cart->user->associate($user);    // error（动态属性之后不能调用 associate 函数）

            $cart->save();
        }
        return [];
    }
    public function index(Request $request){
        $cartItems=$request->user()->cartItems()->with('productSku.product')->get();
        $addresses=$request->user()->addresses()->orderBy('contact_phone', 'asc')->get();     // 不使用动态属性（可链式调用多个函数）
//        $addresses=$request->user()->addresses->get();                                        // error（动态属性之后不能调用 get 函数）
//        $addresses=$request->user()->addresses->orderBy('contact_phone', 'asc');              // error（动态属性之后不能调用 orderBy 函数）
//        $addresses=$request->user()->addresses;                                                 // OK（动态属性之后不调用任何函数，可以正常使用！）
        return view('cart.index', ['cartItems'=>$cartItems, 'addresses'=>$addresses]);
    }
    public function remove(ProductSku $sku, Request $request){
        $request->user()->cartItems()->where('product_sku_id', $sku->id)->delete();
        return [];
    }
}
